package com.sheng.leetcode.year2025.month09.day08;

import org.junit.Test;

import java.util.Arrays;

/**
 * @author by ls
 * @date 2025/9/8
 * <p>
 * 1317. 将整数转换为两个无零整数的和<p>
 * <p>
 * 「无零整数」是十进制表示中 不含任何 0 的正整数。<p>
 * 给你一个整数 n，请你返回一个 由两个整数组成的列表 [a, b]，满足：<p>
 * a 和 b 都是无零整数<p>
 * a + b = n<p>
 * 题目数据保证至少有一个有效的解决方案。<p>
 * 如果存在多个有效解决方案，你可以返回其中任意一个。<p>
 * <p>
 * 示例 1：<p>
 * 输入：n = 2<p>
 * 输出：[1,1]<p>
 * 解释：a = 1, b = 1。a + b = n 并且 a 和 b 的十进制表示形式都不包含任何 0。<p>
 * <p>
 * 示例 2：<p>
 * 输入：n = 11<p>
 * 输出：[2,9]<p>
 * <p>
 * 示例 3：<p>
 * 输入：n = 10000<p>
 * 输出：[1,9999]<p>
 * <p>
 * 示例 4：<p>
 * 输入：n = 69<p>
 * 输出：[1,68]<p>
 * <p>
 * 示例 5：<p>
 * 输入：n = 1010<p>
 * 输出：[11,999]<p>
 * <p>
 * 提示：<p>
 * 2 <= n <= 10^4<p>
 */
public class LeetCode1317 {

    @Test
    public void test() {
//        int n = 2;
//        int n = 11;
//        int n = 10000;
//        int n = 69;
//        int n = 1010;
        int n = 105;
        System.out.println(Arrays.toString(new Solution().getNoZeroIntegers(n)));
    }
}

class Solution {
    public int[] getNoZeroIntegers(int n) {
        int a = 0, b = n;
        // 先判断是否存在 0，然后从最低位开始，依次把 0 拆分为 9 和 1
        // 类似 9908 -> 9899 + 9
        // 1010 -> 1009 + 1 -> 999 + 10 + 1 -> 999 + 11
        // 减去前一位 + 1就可以让当前位数变成 9
        // 105 -> 99 + 6
        // 1015 -? 999 + 16
        // 如何判断 n 中是否还存在 0？
        // 10^k
        int base = 1;
        for (int x = n; x > 1; x /= 10) {
            int d = x % 10;
            if (d <= 1) {
                d += 10;
                // 借位
                x -= 10;
            }
            // a 这一位填 d/2，比如百位数就是 d/2 * 100
            a += d / 2 * base;
            base *= 10;
        }
        return new int[]{a, n - a};
    }
}
